#!/usr/bin/python
""" # -*- coding: utf-8 -*- """

import sqlite3
from SQLite3_auth import Singleton


class DAOD(Singleton):
    def __init__(self ):
        """
        Inicia a conexao para sqlite3
        """
        self._connect()
        return


    def _connect(self):
        """
        Cria a conexao
        """
        mydatabase =  "myufwdata.db"
        self.connection = sqlite3.connect(mydatabase)
        return


    def _get_cursor(self):
        """
        Testa a conexao e retorna o cursor 
        """
        try:
            self.connection.ping()
        except:
            self._connect()
        return self.connection.cursor()


    def get_row(self, query):
        """
        Retorna uma linha (registo)
        """
        cursor2 = self._get_cursor()
        cursor2.execute(query)
        row = cursor2.fetchone()
        cursor2.close()
        return row


    def get_rows(self, query):
        """
        Retorna todos os registos
        """
        cursor2 = self._get_cursor()
        cursor2.execute(query)
        rows = cursor2.fetchall()
        cursor2.close()
        return rows


    def execute(self, query):
        """
        Executa uma query para update, delete, etc
        """
        cursor2 = self._get_cursor()
        cursor2.execute(query)
        cursor2.close()
        return

    def create_ufw(self):
        """
        Apaga a tabela ufw se existir e volta cria-la vazia
        """
        cursor2 = self._get_cursor()
        cursor2.execute("CREATE TABLE ufw ( s0 TEXT, s1 TEXT, s2 TEXT, s3 TEXT, s4 TEXT, s5 TEXT, s6 TEXT, s7 TEXT)")
        self.connection.commit()
        cursor2.close()
        return

    def add_row_ufw(self, Data, Hora, IP, Pais, Time_Zone, Cidade, Latitude, Longitude):
        """
        Acrescenta um registo na tabela ufw
        """
        retval = True
        cursor2 = self._get_cursor()
        li = []
        li.append(Data)
        li.append(Hora)
        li.append(IP)
        li.append(Pais)
        li.append(Time_Zone)
        li.append(Cidade)
        li.append(Latitude)
        sql = 'INSERT INTO ufw VALUES('

        """
        O seguinte codigo verifica se existem os caracteres ", ' ou ` dentro das strings dos dados e controi a string sql
        baseada nessa verificacao para garantir que a introducao na base de dados se efectua corretamente
        """
        a1 = False # flag de validacao
        for x in li:
            if '"' not in x:
                sql = sql + '"' + x + '",'
                a1 = True
            if not a1:
                if "'" not in x:
                    sql = sql + "'" + x + "',"
                    a1 = True
            if not a1:
                if '`' not in x:
                    sql = sql + '`' + x + '`,'
            a1 = False # repoe a flag a False
                
        if "'" not in Longitude:
            sql = sql + "'" + Longitude + "')"
            a1 = True

        if not a1:
            if '"' not in Longitude:
                sql = sql + '"' + Longitude + '")'
                a1 = True

        if not a1:
            if '`' not in Longitude:
                sql = sql + '`' + Longitude + '`)'
        """ termina aqui """


        try:
            cursor2.execute(sql)
        except:
            retval = False
        self.connection.commit()
        #cursor2.close()
        return retval

